/*******************************************************************************
*
*   FILE NAME:
*       Game.h - Game class definition
*
*   DESCRIPTION:
*       Provides basic graphics device initialization, game logic, and rendering
*       code.
*
*******************************************************************************/
#pragma once

#include "GameTime.h"
#include "GameWindow.h"
#include "GraphicsDevice.h"
#include "Types.h"

class Game
{
public:
    Game( void );
    ~Game( void );

    void Exit( void );
    void Run( void );

    GraphicsDevice& GetGraphicsDevice( void );
    GameWindow& GetGameWindow( void );

protected:
    virtual void Initialize( void );
    virtual void LoadContent( void );
    virtual void BeginRun( void );
    virtual void Update( const GameTime& game_time );
    virtual void Draw( const GameTime& game_time );
    virtual void EndRun( void );
    virtual void UnloadContent( void );

private:
    boolean mDone;
    GameWindow mGameWindow;
    GraphicsDevice* mGraphicsDevice;

    Game( const Game& other );
    Game& operator=( const Game& other );
};
